/*
void qsort(void *base, size_t nmemb, size_t size,
                  int (*compar)(const void *, const void *));
功能: 排序函数
参数:
    base    数组
    nmemb   数组长度
    size    数组元素大小
    int (*compar)(const void *, const void *)   回调函数
返回值:
    空

    函数指针    本质是指针 是一个可以指向 函数的指针
    指针函数    本质是函数 返回值为指针类型的函数
*/

#include <stdio.h>
#include <stdlib.h>

// int (*compar)(const void *, const void *)
// int  函数返回值类型
// (*compar)    类型名称
// (const void *, const void *) 参数列表的类型

// 泛型编程


typedef int (*asodifjaiofja)(const void *, const void *);
/*
int  函数返回值类型

(*asodifjaiofja)


asodifjaiofja -->> 函数名 是函数的首地址

找到函数

*/


// 将这个函数指针 定义成为了一种类型 类型名 叫做 compar

void sort_func(void *base, size_t nmemb, size_t size, asodifjaiofja func);

// 比较函数
int Compar(const void * val_1, const void *val_2)
{
    printf("val1 = %d\n" , *(int * )val_1);
    printf("val2 = %d\n" , *(int * )val_2);
    return *(int * )val_1 - *(int * )val_2;
}


int main(int argc, char const *argv[])
{
    int arr[10] = {8 , 6 , 5 , 2 , 9 , 7 , 10 , 30 , 1 , 90};

    // 排序
    qsort(arr , sizeof(arr) / sizeof(int ) , sizeof(int) , Compar);

    for (size_t i = 0; i < sizeof(arr) / sizeof(int ); i++)
    {
        printf("arr[%ld] = [%d]\n" , i , arr[i]);
    }
    
    return 0;

}